!% Constant Story "De Zwijnsrug"; Constant Headline "^Een wanhopige strijd^^ Copyright (C) 2006 Eric Eve; vertaling (C) 2006 Victor Gijsbers^ Vrijgegeven onder de Gnu Public License, versie 2 of later.^"; Constant DEATH_MENTION_UNDO; Constant MAX_SCORE 15; Constant ENEMY "Je kan niet alle vijanden alleen bevechten, je hebt niet de minste intentie om naar hen te deserteren, en bovendien heb je afschuwelijke verhalen gehoord over wat ze met gevangenen doen. "; Release 1; Attribute view; Attribute flammable; Replace MakeMatch; Replace Identical; Replace NounDomain; Replace TryGivenObject; #Ifdef DEBUG; Replace LanguageVerbIsDebugging; #Endif; Include "Parser"; Include "seeno.h"; Include "style.h"; Include "smartcantgo.h"; Include "Tasks"; Object LibraryMessages with before [; Attack: if(noun==player) "Zelf-verminking behoort niet tot de plichten van een soldaat."; Burn: if(noun==player) "Je bent er nog niet klaar voor om jezelf in de fik te steken."; print_ret (CTheIs) noun, " niet brandbaar."; !VICTOR: testen! Insert: ! if(lm_n == 1 && noun == black_powder && second==canvas_bag && second has open) ! { ! move noun to second; ! give noun moved; ! give noun ~concealed; ! print_ret "You manage to scoop up all the black powder into ", (the) second, "."; ! } if(lm_n == 1) { print "(eerst ", (the) lm_o, " pakkend)^"; keep_silent = true; ; keep_silent = false; if(noun in player) <>; rtrue; } LookUnder: "Je hoeft in dit spel nergens onder te kijken; BEKIJK en ZOEK zouden voldoende moeten zijn."; PutOn: if(lm_n == 1) { print "(eerst ", (the) lm_o, " pakkend)^"; keep_silent = true; ; keep_silent = false; if(noun in player) <>; rtrue; } Go: if(lm_n == 5 && lm_o has openable) { if(lm_o has locked) print "(eerst proberend ", (the) lm_o, " te openen)^"; else print "(eerst ", (the) lm_o, " openend)^"; ! print (the) lm_o,")^"; keep_silent = true; ; keep_silent = false; if(lm_o has open) <>; rtrue; } Miscellany: if(lm_n == 44) "Er is hier niets waar ~alles~ naar zou kunnen refereren."; Open: if(lm_n == 2) { print (The) lm_o; if(lm_o has pluralname) print " lijken"; else print " lijkt"; " op slot te zitten. "; } Pray: "Er zal meer dan gebed voor nodig zijn om de Phartipu te verslaan."; Push: if(lm_n==3) "Daar zal je niets mee bereiken."; PushDir: if(lm_n==1) "Dat zou zinloos zijn."; Remove: if(lm_n==2 && noun==dagger && second==corpse && dagger hasnt moved) <>; Search: if(lm_n==5 && noun has openable && noun hasnt open) { print "(eerst "; if(noun has locked) print "proberend ", (the) noun, " te openen)^"; else print (the) noun, " openend)^"; ! print (the) noun, ")^"; <>; } Sing: "Iedereen vertelt je dat je angstaanjagend slecht zingt, maar waarschijnlijk is het toch niet angstaanjagend genoeg om de vijand te demoraliseren."; Sleep: "Dat zou je graag doen, maar je hebt eerst een veldslag te winnen."; Sorry: "Wanneer de Phartipu over de rug komen zullen excuses niet meer volstaan!"; Think: "Daar is geen tijd voor - de koning heeft je hierheen gezonden om je een man van daden bent."; WaveHands: if(location has view) "Je hebt geen vrienden in het kamp van de vijand en wilt ook geen boodschap aan de Phartipu sturen. Bovendien, ze zouden je waarschijnlijk toch niet zien zwaaien."; ] ; Include "pname.h"; Include "Verblib"; Include "NewMenus"; !==================================================== class Room with description "In de maak. [BUG - neem aub contact op met de maker.]", name 'landschap' 'land' 'uitzicht', cant_go [; SmartCantGo(); ], has light ; class Distant with before [; examine: rfalse; default: print_ret (CTheIs) self, " te ver weg."; ], before_implicit [; Take: return 2; ], has scenery ; class Fixture has scenery ; class Path with path_dir 0, before [dir; Follow, Enter, GoAlong: dir = PrintValOrRun(self, path_dir); if(dir > 1) <>; if(dir==0) "Die kant kan je niet op."; Take: if(verb_word=='neem') <>; ] has scenery ; class Tent with before [; Enter: <>; Burn: print_ret "Het zou de Phartipu ongetwijfeld aanmoedigen wanneer ze jouw ", (name) self, " in vuur en vlam zouden zien staan, maar dat is nauwelijks je doel te noemen!"; Search: <>; Open: "De tent is al zo open als ze dient te zijn."; Close: "Een tent heeft geen deur!"; Lock, Unlock: "Het leger van Lorayne is er nooit aan toe gekomen om tenten te ontwerpen die op slot kunnen."; ] has scenery ; !===================================================== Room dustyPath "Stoffig pad" with description "Het lange, stoffige pad leidt door verwaarloosde akkers omhoog naar de Zwijnsrug in het noorden. Naar het zuiden toe leidt het terug het binnenland van het Koningkrijk Lorayne in, het land dat jij vastbesloten bent tegen elke prijs te beschermen tegen de barbaarse horden van de Phartipu. Een smal landweggetje loopt tussen de velden door naar het oosten.", scenic 'droog' 'stof' 0 "Droog stof bedekt het pad." 'verwaarloosd' 'verwaarloosde' 'veld' 'velden' 'akker' 'akkers' 'rijp' 'gewas' 0 "Het gewas ziet er rijp uit, maar is niet geoogst - de boeren die deze akkers bebouwden zijn vermoedelijk gevlucht uit angst voor de barbaarse invasie.", n_to lowerRidge, s_to "Je kan nu niet terugkeren; je hebt een leger om te leiden en een veldslag om te vechten. Indien jij morgenochtend verliest zal het koninkrijk overspoeld worden door barbaren, en zullen de mensen al naar gelang de gebruiken van de Phartipu gemarteld, afgelsacht, verkracht of tot slaaf gemaakt worden.", e_to [; print "Je loopt ongeveer een halve mijl langs het smalle weggetje.^"; return outside_hut; ], compass_look [ obj; switch(obj) { s_obj: "Naar het zuiden leidt het pad terug naar het hart van het koninkrijk, naar de hoofdstad Enyarol, jouw geboorteplaats Alorney, en alle andere steden en dorpen die je van plan bent te beschermen tegen de plunderingen van de barbaarse Phartipu."; e_obj: "Een smal landweggetje loopt tussen de velden door naar het oosten."; n_obj: "De stoffige weg loopt noordwaards door naar de Zwijnsrug."; d_obj: "Je staart naar beneden, naar het stof op het pad."; u_obj: <>; default: "Die kant op zijn alleen maar akkers."; } ] ; Path -> "stoffige pad" with name 'lange' 'stoffige' 'stoffig' 'lang' 'pad' 'weg', before [; Examine: <>; ], path_dir n_obj ; Distant -> "Zwijnsrug" with name 'Zwijnsrug' 'rug', description "Het is een rug van lage bergen net ten noorden van hier. De naam ~Zwijnsrug~ is kennelijk door een nogal fantasievol persoon bedacht, want er is weinig varkensachtigs aan de vorm ervan; het had net zo goed de ~Ossenrug~ of de ~Stekelvarkensrug~ genoemd kunnen worden, behalve dat Loraynese boeren slechts zelden kuddes stekelvarkens houden.", has male; Distant -> "koninkrijk" with name 'konkinkrijk' 'van' 'lorayne', before [; Examine: <>; ] ; Path narrow_lane "smalle landweg" with name 'smal' 'smalle' 'weg' 'weggetje' 'landweg' 'landweggetje' 'karrenspoor' 'spoor', description [; if(location == dustyPath) string 00 "oostwaards"; else string 00 "westwaards"; "Het smalle weggetje, nauwelijks meer dan een karrenspoor, loopt @00 door de velden."; ], path_dir [; if(location == dustyPath) return e_obj; return w_obj; ], parse_name [k wd last_wd dir; wd = NextWord(); if(location==dustyPath) dir ='oost'; else dir = 'west'; while(wd == 'smal' or 'smalle' or 'weg' or 'weggetje' or 'landweg' or 'karrenspoor' or 'spoor') { k++; last_wd = wd; wd = NextWord(); } if(wd == 'naar' or 'van'){ if(last_wd ~= 'weg' or 'weggetje' or 'landweg' or 'karrenspoor' or 'spoor') return 0; last_wd = wd; k++; wd = NextWord(); } if(wd == 'de' or 'het' or dir && last_wd == 'van' or 'naar'){ k++; wd = NextWordStopped(); if(wd == dir) k++; else if(wd ~= -1) return 0; } return k; ], found_in dustyPath outside_hut ; Room lowerRidge "Helling van de Zwijnsrug" with name 'helling' 'van' 'de' 'zwijnsrug', description [; if(topOfRidge has visited) "Hier begint het pad uit het zuiden de rug te beklimmen waar morgen het leger van Lorayne (op dit moment ben jij dat) haar laatste stelling moet verdedigen tegen de barbaarse horden van de Phartipu."; "Het pad uit het zuiden begint hier de rug te beklimmen waar jij verwacht je leger te vinden. Zorgwekkend is dat je geen achterhoede ziet, geen karren met levensmiddelen, geen schildwachten die je begroeten. Nog zorgwekkender is dat je van boven geen enkel teken van leven hoort, geen gezang, niet het schreeuwen van bevelen, niet het geluid van wapens op harnassen wanneer troepen zich verplaatsen."; ], before [; Listen: "Het is stil - veel te stil."; Exits: "Je kan alleen naar het zuiden of het noorden (= omhoog) gaan."; ], compass_look [; switch(noun){ n_obj: <>; s_obj: "Ten zuiden van de bergrug loopt het lange stoffige pad door de vlaktes, die hier aan de noordelijke rand bestaat uit verwaarloosde akkers."; e_obj, w_obj: "Die kant op is alleen maar meer helling, steiler en minder begaanbaar dan hier."; u_obj: <>; } ], s_to dustyPath, u_to [; return self.n_to(); ], n_to topOfRidge, scenic 'vlakte' 'vlaktes' 0 "De vlakte strekt zich zo ver uit naar het zuiden als je kan kijken." 'verwaarloosde' 'akkers' 'akker' 'velden' 'onkruid' 0 "In jouw - weliswaar niet in agricultuur opgeleide - ogen lijken de akkers vol te staan met onkruid." 0 'verte' 'einder' 0 "Zo ver kan je niet kijken." ; Path -> ridge_path "steile pad naar het noorden" with name 'steil' 'pad' 'naar' 'het' 'noorden' 'rug' 'zwijnsrug' 'n//', description "Het pad klimt behoorlijk steil naar de top van de rug.", before [; Climb: <>; ], path_dir n_obj ; Path -> dusty_path_s "lange stoffige pad naar het zuiden" with name 'lange' 'stoffige' 'pad' 'naar' 'het' 'zuiden' 'z//', description "Het lange stoffige pad loopt recht over de vlakte naar de einder.", path_dir s_obj ; !======================================================================================= Room outside_hut "Buiten een hut" with name 'smal' 'smalle' 'weg' 'weggetje' 'landweg' 'landweggetje' 'karrenspoor' 'spoor', description "De smalle landweg uit het westen eindigt bij een eenzame hut midden in de verlaten velden.", w_to [; print "Je loopt terug langs het weggetje en komt al snel weer bij het pad naar de Zwijnsrug uit.^"; return dustyPath; ], in_to hut_door, s_to hut_door, compass_look [; if(noun == w_obj) "Een smal landweggetje loopt door de velden heen naar het westen."; if(noun == u_obj) <>; if(noun == d_obj) "Je staart naar beneden."; "Die kant op zijn alleen maar akkers."; ], before [; Exits: "Je kan naar het westen of naar binnen (= zuid)."; ] ; Fixture -> hut "kleine hut" with pname '.x' 'kleine' '.x' 'eenzame' '.x' 'hut' '.or' 'schuur', description "De hut heeft een stevige houten deur, maar geen ramen; het is niets meer dan een schuur, waarschijnlijk om landbouwwerktuigen in op te slaan.", before [; Enter: <>; Open: <>; Close: <>; Lock: <>; Unlock: <>; ], has openable lockable male ; Fixture -> "omringende velden" with name 'verwaarloosde' 'akkers' 'akker' 'velden' 'onkruid' 'omringende' 'veld', description "Je bent geen boer, maar de gewassen zien er overrijp uit, en de akkers zijn verwaarloosd. Je hebt ook het vermoeden dat er hier teveel onkruid groeit, behalve op een stukje kale grond dicht bij de hut.", before [; Enter: "Je hebt veel urgentere dingen te doen dan door de velden te banjeren."; Search: <>; Examine: rfalse; default: "Het is gebruikelijk de landbouw aan de horigen overlaten."; ] has pluralname ; Fixture -> patch "stukje kale grond" with pname 'stukje' 'kale' 'grond' '.p' 'verdord' '.or' 'afgestorven' 'onkruid' '.p' 'gras' '.p' 'grassprieten', description "Net rechts van de hut is een klein stukje kale grond waar al het onkruid verdord en afgestorven is, en alleen nog wat gras is achtergebleven. Tussen de grassprieten denk je een paar korrels van een zwart poeder te zien, maar misschien is het alleen maar aarde.", before [; Search: <>; Enter: "Je hebt er niets aan om het gras plat te trappen."; ] ; Object -> powder_grains "korrels zwart poeder" with name 'paar' 'korrels' 'korreltjes' 'zwart' 'poeder' 'aarde', description "Je kan niet precies zien of je gelijk hebt - misschien is het wel verbeelding - maar toch lijkt het alsof er op het stuk kale grond een soort zwarte korrels ligt dat je verder nergens op de grond ziet.", before [; ! SetPronoun('it', self); Take, Remove, Insert, Transfer: "Het zou veel te veel werk zijn om de kleine korreltjes te zoeken en tussen de aarde uit te peuteren."; Search: <>; Smell: "Er zijn er te weinig om je een specifieke geur te laten waarnemen."; Eat, Taste: "Er zijn nauwelijks genoeg korreltjes om je iets te laten proeven, maar bovendien zien ze er helemaal niet lekker uit."; ], before_implicit [; if(action_to_be==##Eat) return 2; ] has pluralname scenery ; Fixture hut_door "deur" with pname '.x' 'stevige' '.x' 'houten' 'deur' '.p' 'deur' 'van' 'de' 'hut' '.p' '.x' 'groot' '.x' 'ijzeren' 'slot', description "De stevige houten deur bevat een groot ijzeren slot.", door_to [; if(location == outside_hut) return inside_hut; return outside_hut; ], door_dir [; if(location == outside_hut) return in_to; return out_to; ], before [; Unlock: if(second==sword) "Je zwaard is te groot en te onhandig om het slot mee open te peuteren."; Lock: if(self hasnt locked) "Het slot is kapot."; Attack, Cut: if(self has locked) "Zowel de deur als het slot blijken opvallend stevig te zijn."; "Je hebt het slot al kapot gemaakt; er is geen reden om ook de deur eraan te doen geloven."; Receive: if(noun== dagger or sword) <>; KnockOn: "Je klopt op de deur, maar niemand geeft antwoord."; Push: <>; Pull: <>; ! Take: if(verb_word == 'pick') { ! "You're an expert soldier, not an expert thief; you can't pick a lock with ! your fingers!"; ! } ], after [; Unlock: if(second==dagger) "Je stopt het lemmet van de dolk in het slot, en door ermee heen en weer te wroeten weet je het slot open te breken."; Open: achieve(hut_task); ], with_key dagger, found_in outside_hut inside_hut, has door openable lockable locked ; !======================================================================================== Room inside_hut "In de hut" with description "Het ziet er naar uit dat deze hut gebruikt werd als plaats om landbouwwerktuigen op te slaan door de boeren die dit land bewerkten voordat ze vluchtten.", before [; VagueGo: <>; Exits: "Je kan alleen naar buiten (= noord)."; ], out_to hut_door, n_to hut_door, has ~light ; Object -> poison_sack "zak graan" with name 'vieze' 'oude' 'slappe' 'volle' 'lege' 'graan' 'zak', description [; if(black_powder hasnt moved) "De zak ziet er aardig vol uit, maar er is een gat aan de onderkant waar een rat eraan geknaagd heeft. Een soort zwart poeder is eruit gestroomd."; "Slap en leeg ligt de vieze oude zak, waar een rat een gat in geknaagd heeft, op de grond."; ], initial "In een hoek ligt een zak graan.", before [; Take, Remove, Transfer: if(black_powder hasnt moved) "Zodra je de zak optilt begint het zwarte poeder alarmerend snel uit het gat te stromen. Je zet de zak snel weer neer."; "Je pakt de zak op, maar besluit dat hij te oud is om nog bruikbaar te zijn, vooral vanwege het gat in de bodem, dus je gooit hem terug in de hoek."; Receive: if(noun == sack_hole) "Het gat is al in de zak. Bij wijze van spreken."; if(black_powder hasnt moved) "De zak is te vol."; ], parse_name [ k g wd; for(::){ wd = NextWord(); if(wd ~= 'vieze' or 'oude' or 'slappe' or 'volle' or 'lege' or 'zak' or 'graan') { if(k>g) return k; return 0; } if(black_powder hasnt moved){ if(wd == 'slappe' or 'lege') return 0; } else if(wd == 'volle') return 0; k++; if(wd=='graan') g++; } ], add_to_scope sack_hole, has open container male ; Object -> black_powder "zwart poeder" with article "wat", description "Wat het ook mag zijn, het is in ieder geval niet een soort graan die geschikt is voor menselijke consumptie. Het is zwart, en je hebt nog nooit zwart graan gegeten.", parse_name [wd n; for (::) { wd = NextWord(); if((wd == 'zwart' or 'donker' or 'poeder' or 'gif' or 'vergif' or 'graan') || ((wd == 'hoop') && self hasnt moved)) n++; else return n; } ], before [; Take, Remove: if(self hasnt moved || parent(self) ofclass Room) "Je pakt een paar korrels van het spul op, maar ze slippen je al snel weer door de vingers. Indien je een significante hoeveelheid wilt meenemen zal je iets moeten vinden om het poeder in mee te dragen."; print_ret "Tenzij je het ergens in gaat gieten kan je het poeder het beste in ", (the) parent(self), " laten zitten."; Smell: "Het ruikt buitengewoon smerig."; Taste, Eat: "Beter van niet - kijk wat het met de rat gedaan heeft!"; Pour: if(self hasnt moved) "Wanneer je probeert het poeder vanuit de bovenkant van de zak te gieten, stroomt het voor een groter deel uit het gat in de onderkant."; if(parent(self) ofclass Room) "Je kan het poeder niet gieten voordat het in een soort container zit."; if(second == pool) { action=##Receive; if (RunRoutines(second, after) ~= 0) { action = ##Pour; rtrue; } action = ##Pour; rtrue; } if(second == waterfall or stream or river or fissure) print_ret "Je bent niet dicht genoeg bij ", (the) second, " om dat veilig te doen; het poeder zou door de wind verspreid kunnen worden en zijn doel missen."; if(second==fissure2) "De spleet is boven je, en het poeder zal niet naar boven stromen."; "Daar wil je het poeder niet in gieten."; Insert, Transfer, ThrowAt: if(second == pool or waterfall or stream) <>; if(self in canvas_bag) <>; if(second==canvas_bag or bottle) { if(children(second) > 0) print_ret "Het zou helpen als je ", (the) second, " eerst leeg maakte."; move self to second; give self moved; give self ~concealed; print_ret "Je weet al het zwarte poeder in ", (the) second, " te krijgen."; } ], before_implicit [; Take: if(action_to_be == ##Eat or ##Insert or ##ThrowAt) return 2; ], dcount 0, daemon [; if(++self.dcount > 2 && location has light) { deadflag = 2; "^Je stopt om naar het kamp van de vijand te kijken, benieuwd of het vergiftigen van hun watertoevoer enig effect zal sorteren. Urenlang gebeurt er niets, terwijl de Phartipu hun gewone nachtelijke routine afwerken. Maar vlak na de zonsopkomst wordt het duidelijk dat er iets veranderd is. Zelf vanuit jouw verre uitkijkpunt is het duidelijk dat de stemming in het vijandelijke kamp somber en ingetogen is, zonder de opwinding en energie die je zou verwachten bij een leger dat zich klaar maakt voor een vernietigende overwinning.^^ Wanneer de zon boven de oostelijke horizon stijgt beginnen de trommels van de Phartipu een langzaam en treurig ritme te slaan. Een statige processie nadert het paviljoen, en met veel ceremonieel vertoon wordt een lijkbaar naar een grote brandstapel gebracht. Terwijl de bradnstapel wordt aangestoken vindt er een rituele executie van de dragers plaats, als een offer aan hun gestorven krijgsheer. Tezelfdertijd steekt men het paviljoen in brand.^^ Een uur lang vraag je je af of deze begrafenis slechts de prelude is van een aanval die nog woester zal zijn dan hij anders al geweest was; maar nee, wanneer de gloeiende brandstapel dooft pakken de vijandige strijders hun biezen en gaan uiteen, zich in kleine groepjes terug trekkend naar het noorden. Tegen het middaguur is de laatste uit het zicht verdwenen. Misschien denken ze dat de mysterieuze dood van de Grote Pong een teken is dat de demon-god Malodor zich tegen hen heeft gekeerd. Wat ze ook denken, jouw vaderland is gered."; } ] has concealed ; Object -> rat "dode rat" with name 'dode' 'stijve' 'rat' 'pootjes', description "It looks quite stiff, but it hasn't started to decompose yet; you judge that it's been dead for several hours. ", initial [; if(black_powder has moved) "A dead rat lies on the ground near the sack. "; "A dead rat lies near the sack, its paws in the pile of powder. "; ], before [; Smell: "Inevitably, you smell a rat."; Eat, Taste: print_ret "The last time you were reduced to eating raw rat was as a desperate young soldier on a survival exercise - and you swore then you'd never suffer it again, raw or cooked. Besides you ", (i) "totally", " draw the line at poisoned rat."; Cut: "You don't have time to start dissecting small mammals right now. Besides, you've never been that curious to examine the innards of a rat."; ], has male ; Fixture -> "agricultural equipment" with name 'agricultural' 'equipment' 'rakes' 'hoes' 'scythes' 'implement' 'implements' 'tools', description "Rakes, hoes, scythes, peasant stuff like that - nothing to interest you. ", before [; Take, Remove: "You don't have time to start farming!"; Search: <>; ] has pluralname ; Fixture -> "walls" with name 'east' 'west' 'north' 'south' 'wall' 'walls' 'plain' 'wooden' 'hard' 'rough', description "There's nothing special about hut's plain wooden walls. ", before [; SetPronoun('it', self); Touch: "The walls feel hard and rough."; ] has pluralname ; Fixture -> "corners" with name 'corner' 'corners', description "There's nothing particularly interesting in any of the corners of the hut, unless you count the rakes, hoes and scythes dumped there, along with a dirty old sack. ", before [; SetPronoun('it', self); Search: <>; ], has pluralname ; Object sack_hole "hole" with name 'hole', description "It's just a hole, almost certainly gnawed in the sack by the now deceased rat. ", before [; Take, Remove, Transfer: "You can hardly take the hole from the sack. "; Examine, Touch, Smell: rfalse; Receive: if(noun == dagger or rat or small_key or note) print_ret "You poke ", (the) noun, " in the hole, but this doesn't achieve much. "; "The hole isn't that big. "; default: "You can hardly do that with a hole. "; ] has scenery ; !======================================================================================== Room topOfRidge "Top of Swineback Ridge" with name 'top' 'of' 'swineback' 'ridge', description [; if(self has visited) "The top of the ridge (which continues to east and west) affords a depressingly good view over the valley below - depressing because the size of the enemy camp is all too apparent. A path leads back down the ridge to the south, while piles of abandoned equipment lie all around. "; give moon ~absent; give stars ~absent; give sun absent; remove sun; MoveFloatingObjects(); "You reach the top of the ridge, and find it deserted. There is no sign here of the army you were sent to command, just a few pieces of abandoned equipment left lying around. Down to the north, however, the enemy camp is all too apparent - their tents and campfires seem to fill the entire valley.^^ As you reach the top of the ridge, the sun finally sinks beneath the western horizon, the daylight fading with your hopes. But the full moon still provides enough light for you to find your way around reasonably well. "; ], compass_look [ obj; switch(obj){ n_obj: <>; e_obj, w_obj: print_ret "The ridge continues to ", (the) noun, ", though it's hard to make out many details by moonlight. "; s_obj: "A path leads back down to the south. "; u_obj: <>; } ], s_to lowerRidge, w_to west_ridge, e_to east_ridge, n_to ENEMY has view ; Fixture -> "abandoned equipment" with name 'abandoned' 'equipment' 'broken' 'spears' 'discarded' 'armour' 'pieces' 'piles' 'of' 'spear', description "Some broken spears, discarded armour, that sort of thing, eloquently signalling the hasty departure of the army that should have been here.", before [; Take, Search: "You look through the discarded equipment but find nothing worth taking. "; ] ; Path -> ridgePathSouth "path south" with pname 'path' '.x' 'to' '.x' 'the' '.x' 'south' '.or' 's//' '.p' 'hillside', description "The path leads back down the hillside to the southern plain. ", path_dir s_obj ; Object -> ballista "ballista" with name 'large' 'giant' 'robust' 'wooden' 'great' 'ballista' 'artillery' 'crossbow', initial "A giant ballista squats here, pointing out over the valley below. ", description [; if(bolt in self || bottle in self) { if(ballista_handle.is_wound) string 00 "ready to fire"; else string 00 "loaded"; } else string 00 "unloaded"; "Shaped like a giant crossbow, the ballista (which is currently @00) is a powerful artillery piece, with a lever at the back and a handle at the side. "; ], before [; Take, Remove, Turn, Pull, Push, PushDir, Insert, Transfer: "The great ballista is far too heavy for one man to move by himself. "; Receive: if(children(self) > 0) "The ballista can only be loaded with one missile at a time."; if(noun==sword) "A sword would make a very uncertain missile, and you're loathe to part with such a trusty old companion. "; if(noun ~= bolt or bottle) "There's not much point putting that in the ballista. "; if(noun==bottle && children(bottle) < 2) "The bottle won't make much of a missile in its present state."; Fire: <>; Burn, Attack: "You'd better not, it's valuable government property; besides, it's probably the most effective weapon left on the ridge. "; Set: "You don't know enough about ballistics to be able to do that effectively."; Aim: "You don't know enough about ballistics to be able to adjust it effectively, and you suspect it might take more than one person to do it."; Eat: "That would probably give you indigestion."; Taste: "It tastes as wooden as it looks."; Smell: "A faint smell of well-seasoned wood."; Touch: "It feels pretty robust."; ], before_implicit [; if(action_to_be == ##Eat) return 2; ], capacity 1, has open container static ; Fixture -> ballista_lever "lever" with pname '.x' 'plain' '.x' 'wooden' '.x' 'ballista' '.x' 'firing' 'lever', description "It's just a plain wooden lever.", before [missile; missile = child(ballista); Pull, Push: if(ballista_handle.is_wound == false) { self.result = max(self.result, 1); "Nothing much happens, presumably because there is no tension in the spring. "; } if(children(ballista)==0) { ballista_handle.is_wound = false; self.result = max(self.result, 1); "The firing mechanism springs forward, but nothing much else happens, presumably because the ballista isn't loaded. "; } if((missile==bolt && bolt.is_fueled && bolt hasnt light) || (missile==bottle && bottle hasnt light)) "Haven't you forgotten something?"; ballista_handle.is_wound = false; remove missile; self.result = max(self.result, 2); print "You pull the lever and the ballista fires its missile into the valley below. "; if(missile has light) { achieve(fire_task); self.result = max(self.result, 3); string 01 "A number of fires blaze near the river, where tents are burning and Phartipu warriors are running around trying to douse the flames. "; string 02 "But above all you hear the shouts of some men panicking and others trying to give orders from the general region of the blazing tents."; string 03 "bottle"; steep_path.patrolled = false; remove picket; if(missile==bolt) { give bolt ~light; bolt.is_fueled = false; string 03 "bolt"; } "The blazing @03 traces a trajectory towards the river, where it lands among some of the tents near the pavilion. Within moments, there's a satisfying glow as some of the tents catch fire. Shouts of panic follow almost immediately as some Phartipu warriors flee the burning tents and others rush to douse the flames before they spread to the Great Pong's pavilion."; } "You quickly lose sight of it in the dark; presumably it lands somewhere in the enemy camp, and it probably does some damage, but it's obviously going to take more than a few ballista bolts to rout the Phartipu. "; ], result 0 ; Fixture -> ballista_handle "handle" with pname '.x' 'ballista' 'handle' '.or' 'crank', description "It's the sort of handle you could turn. ", before [; Turn, Pull: if(self.is_wound) "The spring is already wound up to full tension. "; self.is_wound = true; "It's hard work, but you manage to crank the ballista handle until the spring reaches full tension."; ], is_wound false ; Fixture -> ballista_spring "spring" with pname '.x' 'ballista' 'spring' '.p' 'bundle' 'of' 'twisted' 'ropes' '.or' 'skeins' '.p' '.x' 'firing' 'mechanism', description "The spring that powers the ballista is basically a bundle of twisted ropes (otherwise known as skeins). ", before [; Pull: if(ballista_handle.is_wound) "It's already at full tension."; "Trying to pull the ropes by hand would be too much like hard work; if you want to prepare the ballista for firing you'd do better to wind the handle. "; Cut: "That would certainly be counterproductive."; Attack: "You have no reason to damage it."; ] ; !======================================================================== Room west_ridge "West End of Ridge" with name 'west' 'end' 'of' 'ridge', description "Although the valley below looks full of enemy tents, up here on the west end of the ridge there's only one, just to the south of where you stand, a large canvas structure that would almost certainly be the command tent were there still an army here to command. The remainder of the ridge slopes away to the west, but the bulk of it lies to the east.", e_to topOfRidge, n_to ENEMY, in_to inside_tent, s_to inside_tent, w_to "The ridge slopes gradually away from the west, but that would take you too far away from where you need to be.", compass_look [; switch(noun){ in_obj: "You can't see inside the tent from here. "; n_obj: <>; e_obj: "The ridge continues to the east, but it's hard to make out many details in the moonlight. "; w_obj: "The ridge slopes gradually away to the west. "; s_obj: "Immediately to the south stands the command tent."; u_obj: <>; } ], before [; Exits: "You can go east or in (= south)."; ] has view ; Tent -> command_tent "command tent" with name 'large' 'canvas' 'structure' 'command' 'tent', description "It's too large to be a sleeping-tent for common soldiers, and it still flies the king's banner. ", ; Fixture -> royal_banner "royal banner" with name 'royal' 'silver' 'blue' 'grey' 'gray' 'king^s' 'banner', description "You know the royal banner to be silver on blue, but in the moonlight it looks like two shades of grey.", before [; Examine: rfalse; default: "The banner, flying from the top of the tent, is out of reach. "; ], ; !=================================================================== Room inside_tent "Inside the Command Tent" with description "It looks surprisingly bare, for a command tent; perhaps the deserting troops looted it before they left. A plain wooden table still stands near the centre, while a metal strong-box lies in one corner. ", name 'inside' 'command' 'tent', out_to west_ridge, n_to west_ridge, before [; Smell: if(noun == nothing) "It smells rather as if someone's been boozing in here. "; VagueGo: <>; Exits: "You can only go out (= north)."; ], has ~light ; Fixture -> "tent" with name 'tent', before [; Examine: <>; Burn: <>; Smell: <>; ] ; Fixture -> table "table" with name 'plain' 'wooden' 'campaign' 'table', description "It's just a plain wooden table, of the sort senior officers often use on campaign.", has supporter ; Object -> -> lamp "small brass lamp" with name 'small' 'military' 'brass' 'lamp' 'lantern' 'burning' 'flame' 'torch', description "It's a tribute to the design of military lamps that this one's flame is still burning, and will no doubt continue to burn for some time to come.", before [; Rub: "No genie appears; you're on your own for this one."; Burn: "The lamp is already lit."; Insert: if(second==pool) "You don't want to do that; the water would probably douse the flame, and you have no way to re-light it."; Douse: "Since you have no way to light it again, that would probably be a bad idea."; ] has light ; Object -> -> note "note" with name 'suicide' 'note' 'paper' , short_name [; if(self has visited) print "suicide "; ], description [; if(self in bottle) { print "It's "; if(bottle has light) print "smouldering and "; "rolled up in the neck of the bottle. "; } give self visited; "On the note is written, in a scratchy hand, ~It started three days ago, terrible rumours flying round the camp, rumours of what the enemy would do to anyone who dared resist them. At first my men left in twos and threes, then in twenties and thirties, till yesterday they started drifting away in companies and regiments, even men I thought were my best officers and comrades-in-arms! And now, only I am left. So what am I to do? I cannot bear the disgrace of reporting this failure to my king, nor do I dare wait to be captured by the vile enemy that has just appeared in the valley below, so that leaves but one course of action left to me - I shall die by my own hand.~"; ], before [; Burn: if(self hasnt visited) "You might at least read it first!"; if(second hasnt light) print_ret "You can't burn anything with ", (the) second,"."; if(self in bottle && bottle notin ballista) "It's a bit premature to set fire to the note just yet - the bottle might blow up in your hand!"; if(self in bottle) { give bottle light; "You set light to the note. "; } if(self in bush) string 0 "the note, and it burns rapidly. A few small flames lick the surrounding foliage, but the fire fails to take hold of the bush. But maybe burning the suicide note will have done"; else string 0 "a corner of the note, and the flame hungrily rushes along the rest of it, consuming it all and reducing it to ash. Perhaps that will do"; remove self; "You set light to @00 something to save Chorza's reputation."; Eat: if(self hasnt visited) "You might want to read it first."; Take: if(self in bottle && bottle has light) "It's alight - you'd burn your fingers."; ], after [; Eat: "Well, it's too late to make Chorza eat his words, so you may as well do it for him. The army paper isn't exactly tasty - in fact it's the most unpleasant thing you've eaten all month, but as you chew and force yourself to swallow the stuff, you console yourself with the thought that you're probably helping to preserve poor old Chorza's reputation. But as you swallow the last disgusting piece, you resolve that next time you want to get rid of a suicide note, you'll simply burn it."; ], has flammable edible ; Object -> corpse "corpse" with name 'body' 'corpse' 'dead' 'soldier' 'man' 'officer' 'general' 'chorza' 'chorza^s' 'belly' 'clothes' 'clothing', description [; print "From his clothing, he's obviously a high-ranking officer. "; if(self hasnt proper) { give self proper; self.short_name = "General Chorza's body"; print "As you stoop over him, you recognize him as General Chorza, your old friend and comrade, who was meant to be commanding the army here until your arrival. "; if(dagger hasnt moved) "A dagger plunged into his belly shows how he died. "; ""; } else print "In fact, it's your old friend and comrade General Chorza.^"; ], initial [; if(self has proper) print "General Chorza's body "; else print "A body, to all appearances a corpse, "; "lies on the ground close to the table. "; ], short_name 0, before [; PronounNotice(self); SetPronoun('it',self); Take, Remove, Push, Pull, Transfer: "It's probably best to leave him where he is for now; it'll be time to arrange an honourable burial when the future of your living countrymen is secured."; Search: if(small_key hasnt moved) { move small_key to player; "A thorough search of the body reveals a small brass key, which you duly take. "; } Smell: "There's a distinct smell of liquor about it, suggesting that the man may not have died entirely sober. Either the liquor disguises the smell of decomposition, or Chorza has not been long dead."; Turn: if(verb_word=='screw') "But necrophilia is so dead boring!"; "You may as well let him lie till you've enough time to arrange a decent burial for him."; Eat: "Chorza was a tough enough old soldier in life; in death he'll be totally indigestible. "; Touch: if(verb_word=='fondle' or 'grope') "At least allow the old soldier some dignity in death!"; "The corpse feels cold. "; Burn: "That's a barbarian Phartipu custom; Chorza deserves a decent Loraynian burial."; ], life [; Kiss: "He's no sleeping beauty, and it's far too late for the kiss of life to save him. "; Attack: "He's already dead. "; Give, Show: "He's too dead to notice. "; WakeOther: "He'll never wake again - not in this life, anyway. "; Ask, Tell, Answer, Order: "He's far too dead to heed you."; ], before_implicit [; Take: return 2; ], has static male animate ; Object -> dagger "dagger" with name 'dagger' 'blade' 'hilt' 'thin' 'long' 'narrow' 'knife', description "It's a fine piece of craftmanship, with a long narrow blade. ", before [; Pull, Transfer: if(self hasnt moved) <>; Eat: StartTimer(self, 2); "That would be even more painfully self-destructive than Chorza's use of it! What do you want, a warning stamped on the hilt saying ~Warning: Eating daggers can seriously damage your health~?"; Rub: if(self.cleaned) "You've already cleaned it once."; if(self hasnt moved) ; self.cleaned = true; "You wipe the blade of the dagger on the ground, removing the worst of the blood and gore."; ], react_before [; No: if(self.time_left) "No - quite, you're a Captain-General in the Army of Lorayne, a position that does require some measure of intelligence, however modest."; Yes: if(self.time_left) "Yes? Even generals have more intelligence than that!"; ], time_left 0, time_out [; ], after [; Take: if(self hasnt moved) { give self ~concealed; print_ret "You gingerly pull ", (the) self, " from the corpse's belly. "; } Remove: if (self hasnt moved && second == corpse) <>; ], cleaned false, has concealed ; Fixture -> strongbox "strongbox" with name 'strong' 'military' 'metal' 'strong-box' 'strongbox' 'box', description "It's a standard military strong-box of the kind commanders use to keep important papers and the like in.", before [; Take, Remove: "It's too heavy and bulky to cart around; you could lift it, but you don't want to be encumbered by it. "; ], after [; Open: achieve(box_task); ], with_key small_key, known_key small_key, has openable container lockable locked ; Object -> -> bottle "bottle" with name 'large' 'empty' 'bottle' 'neck' 'of', description [; if(children(self)==0) "It's empty. "; if(amber_liquid in self) { print "A small amount of some amber liquid remains in the bottom of the bottle. That it ", (i) "is", " only a small amount suggests how your predecessor spent his last few hours. "; if(self has light) string 0 "burning piece"; else string 0 "piece"; if(note in self || intelligence_report in self) "A @00 of paper sticks out through the neck."; new_line;rtrue; } print_ret "The bottle is full of ", (name) child(self), "."; ], short_name [; print "large "; if(children(self)==0) print "empty "; ], parse_name [k ; if(children(self)==0) return -1; while(NextWord() == 'large' or 'bottle' or 'neck' or 'of') k++; return k; ], before [contents is_empty; contents = child(self); is_empty = (children(self)==0); if(self has light && action ~= ##Examine or ##Smell) "You'd better not handle the bottle now you've lit the paper fuse."; Smell: if(is_empty) "Even empty the bottle smells of powerful spirits. "; <>; Empty: if(is_empty) "It's already empty. "; if(contents==amber_liquid) "It would be rather a waste to pour that liquid on the ground."; if(contents==water) { self.implicit_open(); remove contents; "You pour the water onto the ground, where it quickly seeps away."; } EmptyT: if(is_empty) "It's already empty. "; self.implicit_open(); <>; Fill: if(location==inside_cave){ if(parent(black_powder)==nothing) "You've just poisoned that pool, you certainly don't want any water from it for yourself!"; if(is_empty){ self.implicit_open(); move water to self; "You fill the bottle with water from the pool."; } "There's already something in the bottle."; } Receive: if(noun == intelligence_report or note) { if(noun hasnt visited) "You might want to read it first. "; if(contents ~= amber_liquid || children(self) > 1) "There's not much point doing that. "; self.implicit_open(); move noun to self; print_ret "You roll up ", (the) noun, " and insert it in the neck of the bottle, so that one end sticks out and the other dips in the liquid."; } if(noun ~= black_powder or amber_liquid) "The neck of the bottle is too narrow. "; Pour: if(is_empty==false) { self.implicit_open(); <>; } Search: if(contents==amber_liquid) "There's a small amount of amber liquid in the bottom of the bottle."; Take: if(self has light) "You'd better not pick up that bottle - it might explode at any moment!"; Insert: if(second==pool && self has open && self.is_empty) <>; if(second==pool && self has open && contents==black_powder) { move self to pool; remove contents; StartDaemon(contents); "Weighed down by the black powder, the bottle sinks to the bottom of the pool, where it is pushed about by the water bubbling up from the spring. The powder quickly seeps out through the open neck of the bottle, mixing with the water and then being carried out by the current through the fissure."; } Close: if(note in self || intelligence_report in self) "The paper sticking out of the neck prevents you closing the bottle. "; Drink: if(contents ~= nothing){ self.implicit_open(); <>; } "The bottle is empty. "; ], react_before [; Smell: if(noun==nothing) <>; ], implicit_open [; if(self hasnt open){ give self open; print "(first opening the bottle)^"; } ], has transparent container open openable ; Object -> -> -> amber_liquid "amber liquid" with name 'amber' 'liquid' 'alcohol' 'liquor' 'raw' 'spirit' 'hooch' 'drink' 'booze', article "some", before [cont; cont = parent(self); if(cont has light && action ~= ##Examine or ##Smell) "You'd better not handle the bottle right now."; Taste: "It tastes like fire on your tongue. "; Drink: if(self.drunk) "One sip was quite enough. "; self.drunk = true; bottle.implicit_open(); "You take one sip and it almost burns your tongue out. Since tonight of all nights you need to remain sober and clear-headed, you decide to give the rest of it a miss. "; Take: "You can't exactly pick it up. "; Examine, Smell: "One whiff is enough to convince you that this liquor must be powerful stuff. "; Pour, Transfer, PutOn: if(second == bush) "You very much doubt there's enough liquid left in the bottle to cover the bush, and there's always the danger that most of it will run off into the ground. "; if(second ~= bolt) "That would be a terrible waste!"; if(cont ~= nothing && cont hasnt open && cont has openable) { give cont open; print "(first opening ", (the) cont,")^"; } remove self; bolt.is_fueled = true; PronounNotice(bolt_liquid); "Your pour the amber liquid over the tip of the shaft, where it starts to soak into the wood. "; Burn: "That would be rather dangerous - the bottle might explode!"; ], before_implicit [; Take: if(action_to_be == ##PutOn) return 2; return 3; ], drunk false, has scenery ; Object -> -> papers "papers" with name 'papers' 'orders' 'official' 'documents' 'routine' 'reports' 'list', description [; print "They're mostly the standard official documents you'd expect a general to have to deal with: his orders, of course, which in this case tell him to hold Swineback Ridge at all costs; a list of the units under his command (or which were under his command before they all deserted); reports on stores and supplies. "; if(intelligence_report hasnt moved) { move intelligence_report to player; "The only one of any interest is the latest intelligence report, which you take to read separately. "; } "^"; ], before [obj cur ks; Burn: if(second ~= lamp && ~~(second==bolt && second has light)) print_ret "You can't burn anything with ", (the) second,"."; if(intelligence_report hasnt moved) "It might be as well to read them first."; if(self in player && bush in location) "Maybe you don't want to be holding them when you set light to them; you don't want to burn your hands, after all!"; if(self notin bush && bush in location) "It won't do much good burning them there!"; if(self notin bush) "That might be a bit premature. "; if(bottle in bush && amber_liquid in bottle) { print "(first hastily removing the bottle to avoid an explosion)^"; ks=keep_silent; keep_silent=true; ; keep_silent=ks; } bush.burnt = true; remove self; do { obj = nothing; objectloop(cur in bush) { if(cur has flammable) { obj=cur; break; } } if(obj ~= nothing && obj has flammable) remove obj; } until(obj==nothing || obj hasnt flammable); "You apply the flame to the paper, and it quickly catches light. As the fire blazes, it starts to spread to the bush, and after a couple of minutes the bush is burning too. You stand back and watch as the flames take hold, and the smoke drifts out over the valley. After half an hour or so the flames burn out. The bush is still there, but it looks less substantial than before; it has become charred and brittle. You just hope your little bonfire didn't attract too much attention from the enemy camp in the valley below. "; Examine: if(papers notin player) { cur = keep_silent; keep_silent = true; print "(first taking the papers)^"; ; keep_silent = cur; } PutUnder: if(second == bush) <>; ], has pluralname flammable ; Object intelligence_report "latest intelligence report" with name 'latest' 'intelligence' 'report' 'paper', article "the", description [; if(self in bottle) { print "It's "; if(bottle has light) print "smouldering and "; "rolled up in the neck of the bottle. "; } give self visited; "It's a couple of days old, and seems to be from Chorza's scouts, reporting on the inexorable advance of the Phartipu army towards Lorayne's northern border. You are particularly struck by a passage that reads, ~Although the Phartipu are officially worshippers of the demon-god Malodor, their warriors idolize their commander, the Great Pong, perhaps because he has led them to so many victories and never suffered a single defeat. Last night we watched (from a safe distance) as a dozen human prisoners (both male and female) were sacrificed to the Great Pong in an interminable ceremony involving ritual torture too horrible to describe. By the end the Phartipu warriors had worked themselves up into such a frenzy that they seemed to be on the point of acclaiming the Great Pong as Malodor Incarnate.~"; ], before [; burn: if(self hasnt visited) "You might want to read it first."; if(second hasnt light) print_ret "You can hardly set light to anything with ", (the) second, "."; if(self in bottle && bottle notin ballista) "It's a bit premature to set fire to the report just yet - the bottle might blow up in your hand!"; if(self in bottle) { give bottle light; "You set light to the report. "; } if(self in bush) string 0 "set the flame to the intelligence report and it burns well enough. Some of the surrounding foliage starts to smoulder, but the fire is not substantial enough to take hold in the bush, so all you manage to achieve is the destruction of"; else string 0 "put the report in the flame, and watch as the fire consumes it, leaving nothing behind. At that point you wonder what useful purpose was served by burning"; remove self; "You @00 the intelligence report."; eat: "That really isn't the standard military procedure for digesting the contents of a report."; Take: if(self in bottle && bottle has light) "It's alight - you'd burn your fingers."; ] has flammable ; Object small_key "small brass key" with name 'small' 'brass' 'key', description "It's just an ordinary small brass key, nothing fancy, nothing special. You must have seen scores like it in your long career." ; [is_dagger; if(noun==dagger) rtrue; rfalse; ]; [is_corpse; if(noun==corpse) rtrue; rfalse; ]; !========================================================= Room east_ridge "East End of Ridge" with name 'east' 'ridge', description "There's still an excellent view over the valley from here, although the main part of the ridge lies to the west. Further to the east the land slopes down into a wood, but there is a steep path round the wood to the northeast. Several tents have been left abandoned, half-dismantled by fleeing deserters; the only one left standing looks like a supply tent (immediately to the south).", w_to topOfRidge, n_to ENEMY, ne_to [; if(bush in self) "After only a few steps down the path you find your way blocked by a prickly bush. "; return steep_path; ], e_to "It would be easy enough to get lost in that dense wood in broad daylight; at night losing your way would be a virtual certainty, even assuming the wood is penetrable. ", in_to inside_supply_tent, s_to inside_supply_tent, compass_look [; switch(noun){ n_obj: <>; e_obj: "To the east looms a dense, dark wood."; w_obj: "The to west lies the bulk of the ridge, though by the moonlight you can make out little more than vague shapes that way."; ne_obj: "To the northeast you can just make out the start of steep path. "; in_obj: "You can't see inside the supply tent from here."; u_obj: <>; s_obj: "Immediately to the south stands the supply tent."; } ], before [; Exits: "You can go northeast, west or in (= south). "; ] has view ; Fixture -> bush "prickly bush" with name 'thick' 'dry' 'brittle' 'prickly' 'bush' 'foliage' 'twigs' 'twig', description [; print "You can't make out precisely what species of bush it is by moonlight, but it stands about five feet high, and is "; if(self.burnt) print "still a bit too thick to pass through, even though the fire has thinned it out considerably. "; else print "too thick to pass through. "; if(children(self)>0) <>; ""; ], before [; give self visited; Cut: if(second==nothing){ if(sword in player){ print "(with your sword)^"; <>; } if(dagger in player){ print "(with the dagger)"; <>; } print "You can't cut it with your bare hands."; } if(second==dagger) "It would take you all night to prune the bush with that dagger!"; if(second==sword){ if(self.burnt){ while(child(self)) { move child(self) to parent(self); } remove self; achieve(bush_task); move bush_remains to east_ridge; "The badly-burnt bush succumbs to your frenzied attack, and you manage to hack it to pieces with your sword. "; } "Mozes kriebel! You hack away at the bush with your sword, but you don't make much impression. "; } "You can hardly cut the bush with that!"; Attack: if(second==nothing) "Attacking the bush with your bare hands simply earns you a few scratches. "; if(second==sword or dagger) <>; "That proves singularly futile. "; Burn: if(second ~= lamp && ~~(second==bolt && second has light)) print_ret "You can't burn the bush with ", (the) second, ". "; if(self.burnt) "You've already burned it. "; "The bush starts to smoulder, but doesn't quite catch light, and the few small flames you kindled rapidly go out."; JumpOver: "It's too tall, and you are not as young and fit as you used to be. "; Climb: "There's nothing firm enough on the bush to give you a handhold or foothold. "; Touch: if(self.burnt) "It feels dry and brittle. "; "It feels very dry, as if it hasn't rained here for months. "; Receive: if(noun==bolt) "You can hardly put that in the bush. "; Search: if(children(self)==0) "You won't find anything but twigs and foliage. "; Pull, Push: "The bush wobbles a little, but only a little."; ], react_before [; PutOn: if(second==self) { if(noun==amber_liquid) <>; print_ret "You can't really put things ", (i) "on", " the bush; it's a bit too tall for one thing, and for another the top of the bush doesn't provide much of a supporting surface. "; } ], burnt false, has open container flammable ; Fixture -> wood "wood" with name 'wood' 'thick' 'dense' 'dark' 'belt' 'of' 'trees', description "The thick belt of trees covers the section of ridge that slopes down to the east. ", before [; Enter: <>; ], ; Tent -> supply_tent "supply tent" with name 'large' 'green' 'supply' 'tent', description "It's a large green tent, the standard pattern for supply tents in Lorayne's military.", ; Fixture -> abandoned_tents "abandoned tents" with name 'abandoned' 'half-dismantled' 'half' 'dismantled' 'tents' 'canvas', description "The abandoned tents flop uselessly on the ground in random disarray, an affront to the order and precision of military discipline.", before [; Take, Remove: "You have no use for them."; Enter: "The half-dismantled tents are in no state to be entered."; Burn: "There's no need to encourage the enemy by showing your camp to be in disarray."; Search: "You find nothing of use among the abandoned tents."; Touch: "Just rough, army canvas."; Smell: "You smell nothing unexpected: just the stink of unwashed soldiers, the lingering smell of army cooking, the faint whiff of cheap booze, and all the other odours you've come automatically to associate with soldiers' tents."; ], has pluralname ; Path -> ne_ridge_path "path" with name 'steep' 'path', description "The path leads off to the northeast.", path_dir ne_obj ; Fixture bush_remains "remains of the bush" with name 'remains' 'of' 'bush' 'twigs', description "After your frenzied attack little remains of the bush apart from a few twigs sprouting from the ground. ", before [; SetPronoun('it', self); Cut, Attack, Burn, Take, Remove, Transfer, Pull, Push : "What's left of the bush isn't worth the effort of clearing."; ], has pluralname ; !================================================================================ Room inside_supply_tent "Inside the Supply Tent" with name 'inside' 'the' 'large' 'bare' 'supply' 'tent' 'space', description "There's a large space here, as befits a supply tent, but it's almost entirely bare; it looks as if nearly everything of use has been purloined by deserters. ", before [; VagueGo: <>; Exits: "You can only go out (= north)."; ], out_to east_ridge, n_to east_ridge has ~light ; Fixture -> "tent" with name 'tent', before [; Examine: <>; Burn: <>; Smell: <>; ] ; Object -> canvas_bag "large canvas bag" with name 'large' 'canvas' 'bag', initial "A large canvas bag lies on the ground. ", before [; Receive: if(noun==bolt) "The long shaft is far too big to fit in the bag. "; if(noun==sword) "Your sword is too long to fit in the bag. "; if(noun==lamp) "It's not a not idea to put the lamp in the bag - you might burn it (the bag, that is)."; if(black_powder in self) "The bag is already full."; Fill: if(black_powder notin self && TestScope(black_powder)) <>; if(black_powder in self) "The bag is already full."; if(TestScope(pool)) "It's not that suitable for carrying water. "; EmptyT: if(black_powder in self) <>; Open: "It's open already."; ], has container open ; Object -> bolt_pile "pile of wooden shafts" with pname 'pile' 'of' '.x' 'ballista' 'bolts' '.p' '.x' 'ballista' 'bolt' '.p' 'pile' 'of' '.x' 'wooden' 'shafts' '.p' '.x. wooden' 'shaft', description "Each shaft in the pile has a round cross-section and a pointed tip.", initial "A pile of wooden shafts sits by the entrance. ", before [; SetPronoun('them', self); Take: if(parent(bolt) == nothing) { move bolt to player; PronounNotice(bolt); "You pick up one of the shafts from the pile. "; } else "One shaft at a time is enough, and you've already taken one. "; Search: "You find nothing in the pile of wooden shafts except a whole lot of wooden shafts."; ] has static ; Object bolt "wooden shaft" with pname '.x' 'ballista' 'bolt' '.or' 'missile' '.p' '.x' 'long' '.x' 'round' '.x' 'wooden' 'shaft' '.p' '.x' 'pointed' 'end' '.or' 'tip' '.or' 'point' '.x' 'of' '.x' 'bolt' '.or' 'shaft', description [; print "The long wooden shaft has a round cross-section and a pointed tip"; if(self has light) ", which is burning fiercely."; if(self.is_fueled) ", which is soaked in alcohol."; "."; ], short_name [; if(self has light) print "blazing "; ], is_fueled false, before [; Burn: if(second ~= lamp) print_ret "You can't light anything with ", (the) second, "."; if(self has light) "It's already burning."; if(self.is_fueled == false) "When you apply the lamp to the end of the ballista bolt, the tip starts to smoulder, but it refuses to catch light."; give self light; "The alcohol-soaked bolt-tip quickly catches light and starts burning nicely. "; Eat: StartTimer(self, 2); "(1) You don't like the taste of it, (2) it's too big for you, (3) you might get splinters in your mouth, (4)... need I go on?"; Smell: if(self.is_fueled) "The tip of the shaft smells quite strongly of something alcoholic. "; Take: if(self in player && TestScope(bolt_pile)) <>; Douse: if(self has light) "That might not be so easy to do; besides, you've just gone to all that trouble to get it to burn!"; ], time_left 0, time_out [; ], react_before [; Yes: if(self.time_left > 0) "(4) It's too hard to chew, (5) it would take too long, (6) it's not edible."; No: if(self.time_left >0) "I should think not!"; ], add_to_scope [; if(self.is_fueled) PlaceInScope(bolt_liquid); ] has flammable ; Object bolt_liquid "liquid" with name 'pungent' 'poured' 'amber' 'liquid' 'alcohol' 'liguor', description "The liquid has soaked into the tip of the shaft. ", before [; Smell: if(bolt has light) "You'll burn your nose off if you try that! "; "It still smells powerfully alcohol. "; Burn: <>; Examine: rfalse; default: "You can hardly do that with the amber liquid now that it has soaked into the shaft. "; ], has scenery ; !===================================================================================== Room steep_path "Steep Path" with name 'steep' 'path', description "The steep path down from the top of the ridge to the southwest levels off just above a waterfall cascading down into the valley below. This levelling off is only temporary, though, since the path dips sharply down again as it continues to the northeast.", u_to east_ridge, sw_to east_ridge, ne_to [; if(self.patrolled) { give self locked; move picket to self; "You start down the path, but a few yards from the bottom you become aware that there's an enemy picket patrolling the area; rather than risk being caught you slip silently back up. "; } print "You cautiously descend the path, keeping a close look-out for enemy patrols, but there seem to be none about; perhaps they've all been recalled to fight the fires you started. Anyway, reassured that the coast is clear, you descend to the foot of the path.^"; return foot_of_path; ], d_to [; return self.ne_to(); ], patrolled true, compass_look [; switch(noun){ n_obj: <>; u_obj: <>; d_obj: "Below you, a waterfall pours out of a fissure in the rocks."; sw_obj: "To the southwest you can see the path climb back up to the top of the ridge."; ne_obj: "The path continues to descend the ridge to the northeast."; } ], before [; Exits: "You can go southwest (= up) or northeast (= down). "; ] has view ; Fixture -> sp_hillside "hillside" with name 'rocky' 'hillside' 'rock' 'rocks', description "At this point the rocky hillside climbs sharply up to the north, and falls almost vertically down to the south. ", before [; Climb: "The hillside is too steep to climb, whether up to the north or down to the south."; ] ; Distant -> fissure "fissure" with name 'fissure' 'source', description "So far as you can tell, it might be wide enough to crawl into, but there's no way you can enter it from here, though you might be able to find a way to get to it from below. " ; Distant picket "picket" with pname '.x' 'enemy' 'picket' '.p' 'movement' '.x' 'below', description "You caught sight of an enemy picket as you descended the path, but from up here you can't see at all them clearly; every now and again you think you see some movement below, but it could just be a trick of the moonlight. " ; !------------------------------------------------------------------------- Room foot_of_path "At the Foot of the Path" with name 'foot' 'of' 'path', description "You find yourself at the foot of a steep path that rises sharply to the southwest. To the north the lower part of the ridge slopes down into the valley occupied by the enemy camp, while from the west you hear the sound of running water. ", u_to steep_path, sw_to steep_path, n_to ENEMY, w_to below_fissure, e_to "You wander a short way off to the east, but finding nothing of interest that way, and realizing that it's probably taking you further from your goal, you turn round and come back.", compass_look [; switch(noun){ n_obj: <>; u_obj: <>; e_obj: "You can't see much of interest to the east."; sw_obj: "To the southwest is the path that climbs back up the ridge."; w_obj: "To the west the ground slopes gently up. "; } ], before [; Exits: "You can go west or southwest (= up). "; ] has view ; Path -> path_from_foot "steep path" with name 'steep' 'path', description "The steep path climbs sharply to the southwest. ", before [; Climb: <>; ], path_dir sw_obj ; Fixture water_sound "sound of running water" with name 'sound' 'of' 'running' 'thundering' 'falling' 'water', description [; print "You hear the sound of falling water, a little like heavy rain, "; switch(location) { steep_path: "from below."; foot_of_path: "a short distance off to the west."; below_fissure: "thundering just to the west."; } ], before [; Listen: <>; Examine: rfalse; default: "You can't do that to a sound. "; ], react_before [; Listen: if(noun==nothing) <>; ], found_in foot_of_path below_fissure steep_path ; !======================================================================== Room below_fissure "Ledge Below Fissure" with name 'narrow' 'ledge' 'below' 'the' 'fissure', description "Here a narrow ledge overlooks the valley to the north and a waterfall cascading down directly to the west from a fissure in the rocks some yards above you. The only obvious way you can go from here is back to the east. ", e_to foot_of_path, u_to [; give self locked; if(bolt in round_hole && sword in round_hole) { print "You pull experimentally on the horizontal shaft, and it seems to hold firm, so you hoist yourself onto it with both hands and find yourself sitting astride it. Cautiously, with one hand on the rock face to steady yourself, you manage to stand up on the shaft, and find that you can look into the fissure. After an alarming wobble you get your arms into the fissure, and then manage to hoist your whole body through.^"; return inside_cave; } if(bolt in round_hole && dagger in round_hole){ move dagger to self; "You pull experimentally on the shaft, and it seems to hold firm, but when you try to hoist yourself up on it, the shaft waggles alarmingly and the dagger works loose, dropping to the ground and leaving the shaft too loose to be a safe support for climbing."; } if(bolt in round_hole) "You pull tentatively on the shaft, but it's too loose in the hole; you daren't use it to climb up to the fissure unless you can find a way to make it firmer."; if(sword in round_hole) "You grasp the sword hilt and try to hoist yourself up by it, but the sword wobbles alarmingly, so you quickly give up the attempt."; "You put one hand in the head-height hole in the rock and try to pull yourself up by it, but you don't make much progress. "; ], n_to ENEMY, w_to "That would make you step off the ledge and plummet to your death. ", compass_look [; switch(noun){ n_obj: <>; u_obj: <>; e_obj: "The ledge slopes gently down to the east."; w_obj: "The ledge ends abruptly in a sharp drop to the west. A yard or so beyond its edge a waterfall cascades down into the stream below. "; } ], before [; Jump: "You'll hardly defeat the enemy by jumping to your death. "; ], has view ; Fixture -> round_hole "round hole" with name 'round' 'deep' 'hole', description [; print "It's a few inches in diameter, and looks pretty deep. "; if(children(self) > 0) <>; ""; ], before [obj; Receive: if(children(self) > 1) "There's no room for anything else in the hole. "; if(children(self) > 0){ obj = child(self); if(noun == sword or dagger && obj == bolt){ move noun to self; print_ret "You wedge ", (the) noun, " in the hole next to the shaft. "; } if(noun == bolt && obj == dagger or sword) { move noun to self; print_ret "You insert the shaft in the hole, and wiggle ", (the) obj, " in attempt to wedge it in."; } } Enter: "It's far too small for a person to get into."; ], capacity 2 has container open ; Fixture -> rocks "rocks" with name 'smooth' 'rocks' 'hillside' 'rock', description "The rocks rise almost vertically from here to the fissure, and look too smooth to be easy to climb; but you notice a deep round hole in the rocks at about head-height. ", before [; Climb: <>; ], has pluralname ; Fixture -> fissure2 "fissure" with name 'wide' 'fissure' 'opening' 'entrance', description "It's about ten feet above the ledge and several yards wide; a waterfall cascades out of the western side of the fissure, but the eastern side looks drier, and might be wide enough to crawl through.", before [; Enter: <>; Search: "You can't see into the fissure from here. "; ] ; Distant waterfall "waterfall" with name 'waterfall' 'water', description [; if(location==below_fissure) string 00 "above your head"; else string 00 "below your feet"; "The source of the water seems to be a fissure in the rocks a few yards @00. From there it falls almost vertically down the hillside, splashing on down into a small stream in the valley below. "; ], before [; Listen: <>; ], found_in below_fissure steep_path ; Distant stream "stream" with name 'small' 'stream', description "The stream runs from the foot of the waterfall into the River Hogwash. ", found_in below_fissure steep_path ; !====================================================================== Room inside_cave "Inside a Cave" with name 'inside' 'a//' 'cave', description "This small cave is so cramped you're forced to stoop. The only way out is via the narrow fissure to the north, through which a steady stream of water pours out from the pool at the centre; this pool seems to be fed by a spring. ", out_to [; print "You squeeze through the fissure and clamber back down the rocks.^"; return below_fissure; ], d_to [; return self.out_to(); ], n_to [; return self.out_to(); ], before [; Jump: "There's not enough headroom for that. "; VagueGo: <>; Exits: "You can only go out (= north or down)."; ], compass_look [; switch(noun) { n_obj, out_obj: "Directly to the north lies the mouth of the cave. "; d_obj: "At your feet is the pool occupying the centre of the caves. "; u_obj: <>; default: "There's nothing that way but the wall of the cave."; } ], has ~light ; Fixture -> pool "pool" with name 'pool' 'bubbling' 'submerged' 'spring' 'water' 'centre' 'center' 'central' 'cool' 'fresh' 'steady' 'stream' 'of' 'current' , description "The pool is full of water bubbling up from a submerged spring, which then pours out through the fissure in a steady stream.", after [; Receive: if(noun == black_powder) return self.receive_powder(); if(black_powder in noun && noun has open) { print (The) noun, " spills its contents into the water. "; return self.receive_powder(); } if(noun == rat or note or intelligence_report) { remove noun; print_ret (CTheIS) noun, " borne away on the current and disappears out of sight through the fissure."; } Examine: if(children(self)==0) rtrue; Search: if(children(self)==0) "There's nothing in the pool but the water bubbling up from below."; ], before [; Enter: "You don't have time for a bath right now."; Drink, Taste: if(parent(black_powder)==nothing) "Not after putting that powder in it!"; "You kneel down by the pool and cup your hands to draw out a couple of mouthfuls of water: it tastes cool and fresh."; Listen: "You can hear the water running out through the fissure. "; ], receive_powder [; remove black_powder; StartDaemon(black_powder); StartTimer(self, 5); achieve(poison_task); "The black powder quickly dissolves in the water, and is borne thence by the stream flowing out through the fissure. "; ], react_before [; Swim: "You don't have time for that; besides you don't have anything to dry yourself with and you don't want to be walking around wet on a chilly night."; Listen: if(noun==nothing) <>; ], time_left 0, time_out [; if(location == parent(self)) "It occurs to you that you may as well leave the cave now, if only to get a better view of the enemy camp."; ] has container open ; Fixture -> fissure3 "fissure" with name 'narrow' 'fissure' 'exit' 'mouth', description "Water pours out of the west end of the fissure, but the east end is reasonably dry, and looks large enough to crawl through.", before [; Enter: <>; ] ; Fixture -> cave_walls "walls" with name 'cave' 'rough' 'brown' 'rock' 'wall' 'walls' 'east' 'west' 'south', description "The walls of the cave are formed from unremarkable rough brown rock.", before [; SetPronoun('it', self); Touch: "The cave wall feels as rough as you would expect."; ] has pluralname ; Fixture -> cave_n_wall "north wall" with name 'north' 'n//' 'wall', description "In the north wall of the cave is the fissure through which the water is streaming out." ; Fixture -> cave_roof "roof of the cave" with pname '.x' 'cave' 'roof' '.or' 'ceiling' '.p' 'roof' 'of' 'the' 'cave', description "The roof of the cave is just above your head, forcing you to stoop. ", before [; Touch: "It's hard and rough: you certainly wouldn't want to bump your head against it."; ] ; Object water "water" with name 'water' 'colourless' 'colorless' 'liquid', description "It's a colourless liquid.", article "some", before [; Drink: self.implicit_open(); remove self; "You drink the water, and feel suitably refreshed. "; Pour, Transfer: switch(second) { pool: self.implicit_open(); remove self; "You pour the water back into the pool. "; default: "You see no reason to pour it there."; } Take: "Your might be able to pour it somewhere, but you can hardly take it."; ], implicit_open [ cont; cont = parent(self); if(cont ~= nothing && cont has openable && cont hasnt open) { give cont open; print "(first opening ", (the) cont, ")^"; } ], ; !=================================================== Object sword "zwaard" with name 'scherp' 'vlijmscherp' 'zwaard' 'gehavend', description "Het begint er wat gehavend uit te zien maar is nog steeds vlijmscherp, en heeft je in menige gewonnen veldslag vergezeld.", before [; Eat: "Je bent een soldaat, geen zwaardetende charlatant uit een plattelandskermis!"; Touch : "Het heeft een goed, stevig lemmet, en een scherpe rand waaraan je je zorgvuldig niet snijdt."; ], ; Object breastplate "leather breastplate" with name 'old' 'scratched' 'leather' 'breastplate' 'armour' 'armor' 'plate', description "It's old and scratched, and hardly the most fashionable wear for a high-ranking general, but like your sword it's seen you through many a battle and it allows you so much more freedom of movement than some shiny steel thing. ", before [; Disrobe: "Time to do that when the battle's won; if it's lost you may as well be buried in it. "; Eat: "It's far too leathery to make an acceptable meal. Besides, it'll do your stomach more good protecting it from the outside. "; ], before_implicit [; Take: if(action_to_be==##Eat) return 2; ], has clothing ; Distant enemyCamp "enemy camp" with pname '.x' 'distant' '.x' 'barbarian' '.x' 'phartipu' '.x' 'enemy' 'camp' '.or' 'troops' '.or' 'horde' '.or' 'hordes' '.or' 'tents' '.or' 'warriors' '.p' '.x' 'camp' 'fires' '.p' 'flames' '.p' 'enemies', description "The distant enemy camp looks enormous; from the spread of camp fires and tents you estimate there must be over a hundred thousand barbarian troops out there ready to invade on the morrow. Even by moonlight you can pick out one tent in particular, almost a pavilion, set up just this side of the river. @01", before [; Enter: print_ret (string) ENEMY; Listen: "Occasional sounds drift up from the valley below: snatches of triumphant song, the occasional bugle-call or drum rattle, even what sounds likes taunts shouted against the army the enemy apparently still believe to be encamped up here on the ridge. @02"; ], react_before [; Listen:if(noun==nothing) { ; if(waterfall notin location) rtrue; } ], found_in [; return (location has view); ] ; Distant pavilion "pavilion" with pname '.x' 'great' 'pavilion' '.p' '.x' 'pong^s' 'command' '.or' 'largest' 'tent', description "The great pavilion, the largest tent in the valley, is presumably the command tent of the Great Pong, dread warlord and demigod of the Phartipu, Conqueror of a Thousand Lands, Scourge of the Weak, Hammer of the Strong, Pong the Widow-Maker, Pong the Virgin-Taker, Pong the Merciless, Pong the Immortal, Pong the Immoral, Pong the Tax-Evader and Doer of a Million Dastardly Deeds. It's no accident, you suppose, that his pavilion is pitched so close to the river, providing him with a ready water supply for all his needs. @01", found_in [; return (location has view); ] ; Distant valley "valley" with name 'valley' 'below', description "The valley below is filled with the tents and camp fires of the invading Phartipu, on both sides of the broad, moonlit river that cuts through its centre and forms the northern boundary of Lorayne. @01", before [; Enter: print_ret (string) ENEMY; ], found_in [; return (location has view); ] ; Distant river "river" with name 'distant' 'broad' 'moonlit' 'river' 'northern' 'boundary' 'hogwash' 'waters', description "The River Hogwash flows silently and sluggishly through the enemy camp in the valley below, its waters reflecting the silvery moonlight. ", found_in [; return (location has view); ] ; Distant moon "moon" with name 'bright' 'brilliant' 'full' 'moon' 'disk' 'disc' 'silvery' 'moonlight' 'ghostly' 'light', description "The moon is full tonight, a bright disc high in the sky casting a ghostly light over the landscape. ", found_in [; if(location has light) rtrue; ], has absent ; Distant sun "sun" with name 'reddening' 'sinking' 'dying' 'sun', description "The reddening sun is sinking rapidly towards the western horizon.", found_in dustyPath outside_hut lowerRidge, has ~absent ; Distant stars "stars" with name 'myriad' 'faint' 'stars' 'familiar' 'constellations', description "A myriad stars puncture the dome of the night sky, though they seem faint next to the brilliance of the new moon, making it hard to pick out any familiar constellations.", found_in [; if(location has light) rtrue; ], has absent pluralname ; Distant sky "sky" with name 'cloudless' 'black' 'dome' 'of' 'the' 'night' 'sky', description [; if(moon has absent) "The cloudless sky is reddening towards the west. "; else "The black night sky is full of stars, but they are far outshone by the brilliant full moon. "; ], found_in [; if(location has light) rtrue; ] ; Distant w_horizon "western horizon" with name 'distant' 'w//' 'west' 'western' 'horizon', description [; if(moon has absent) "The dying sun is rapidly approaching the western horizon. "; "It looks much like any other part of the night sky."; ], found_in [; if(location has light) rtrue; ] ; !====================================================== Object tasks ; ATask -> hut_task "punten voor het openen van de deur van de hut" with value 2; ATask -> box_task "punt voor het openen van de kist"; ATask -> fire_task "punten voor het afbranden van enkele tenten van de vijand" with value 5; ATask -> bush_task "punten voor het weghalen van de struik" with value 2; ATask -> poison_task "punten voor het vergiftigen van de watertoevoer van de Phartipu" with value 5; !===================================================== [ Initialise; lookmode = 2; InitTasks(); string 01 ""; string 02 ""; location = dustyPath; #ifdef DEBUG; pname_verify(); #endif; move sword to player; move breastplate to player; give breastplate worn; player.description = "Vermoeid en uitgeput door lange jaren vechten ben jij nog steeds kapitein-generaal Yelanor, de beste militaire commandant in het land (al zeg je het zelf), en de laatste en en beste hoop van je land."; thedark.description = "Er is hier binnen niet genoeg licht om bij te zien."; Banner(); print "^Je paard werd vijf mijl geleden lam, dus je hebt hem op een boerderij moeten achterlaten en bent te voet verder gegaan. Het was verleidelijk om even te rusten, om de gastvrijheid van de landarbeider te accepteren, maar de bevelen van de koning waren duidelijk - kom zo snel als mogelijk is naar de Zwijnsrug. Hoewel je vermoeid bent door de gevechten tegen de rebellen in het oosten, stond de koning erop dat hij ", (i) "jou", " hier nodig had, om het bevel op je te nemen van het leger boven op de bergrug voor je, een leger dat - hoewel hopeloos in de minderheid - de laatste hoop is voor je vaderland om de hordes barbaren te keren en het vallen van de nacht te voorkomen.^^Voor de tiende keer vandaag verbaas je je over de urgentie die in de boodschap besloten lag. Voor zover je weet is generaal Chorza de commandant van het leger op de rug, en je kent Chroza van vroeger, een goede soldaat en capabale commandant. Wat is het dat Chorza zelf niet kan afhandelen?^^"; return 2; ]; [ PrintValOrRun obj prop; switch(metaclass(obj.prop)){ Object: return obj.prop; String: print_ret (string) obj.prop; Routine: return obj.prop(); default: rfalse; } ]; [that i; if(i has pluralname) print "die"; if(i hasnt pluralname && i hasnt male && i hasnt female) print "dat"; if(i hasnt pluralname && i has male) print "die"; if(i hasnt pluralname && i has female) print "die"; ]; [it i; if(i has pluralname) print "zij"; else if(i has male) print "hij"; else if(i has female) print "het"; else print "het"; ]; [itis i; print (it) i; if(i has pluralname) print " zijn"; else print " is"; ]; ![theIs i; ! print (the) i; ! if(i has pluralname) print " are"; ! else print " is"; !]; [CTheIs i; print (The) i; if(i has pluralname) print " zijn"; else print " is"; ]; [ ChooseObjects obj c; if(c < 2) { if(obj has scenery) return 2; rfalse; } if(action_to_be==##Unlock && obj==small_key) return 5; if(obj==hut or waterfall) return 3; if(obj==pool && action_to_be==##Drink or ##Taste) return 5; if(obj==water && action_to_be ~= ##Drink or ##Pour) return 0; if(obj==sky) return 2; if(obj ofclass Distant) return 1; if(obj hasnt scenery or static) return 3; return 2; ]; [ PourSub; print_ret "You can't pour ", (that) noun, " anywhere. "; ]; [ AboutSub; about_menu.select(); ]; [ FollowSub; print_ret "You can't follow ", (that) noun, "; ", (itis) noun, "n't going anywhere. "; ]; [ GoAlongSub; print_ret "You can't go along ", (DieofDat) noun, "."; ]; [ FireSub; print_ret "You can't fire ", (DieofDat) noun, "."; ]; [ ExitsSub; smartCantGo(true); ]; [ HintSub; hint_menu.select(); ]; [ XyzzySub; "In your long experience as a soldier, muttering strange incantations has never won a battle yet - and it doesn't this time, either. "; ]; [ KnockOnSub; "That achieves nothing."; ]; [ LookBehindSub; "You don't need to look behind anything in this game; EXAMINE or SEARCH should suffice."; ]; [ BadPraySub; "It would cause one hell of a stink if it came out that Lorayne's Captain General was praying to such a barbarous demon."; ]; [ AimSub; print_ret"You can't aim ", (that) noun, "."; ]; [ DouseSub; print_ret (CTheIs) noun, "n't alight."; ]; [ Max a b; if(a>b) return a; return b; ]; [is_fissure; return (noun==fissure or fissure2 or fissure3); ]; [ PutUnderSub; "There's no need to try putting anything under or behind things. "; ]; !========================================================================================= Menu about_menu "Over ~De Zwijnsrug~" ; Option -> about_option "Over dit spel" with description "~Swineback Ridge~ was written as a bit of fun, partly just to try writing something in Inform for a change, and partly to implement a game idea I'd had knocking around for some time. It's a short, puzzle-based game, hopefully not too difficult and certainly not very long. It's nothing very deep, but should provide a few minutes' amusement. As a relatively short, easy game it should be suitable both for beginners and for more experienced players looking for a little ~snack~ of an adventure.^^ ~Swineback Ridge~ is not a cruel game: there are no time limits, there's no way to get killed, and it should be impossible to get the game into an unwinnable state.^^ I've provided some in-game hints, but since this game rather loses its point if you don't work out the puzzles for yourself, they're more in the nature of nudges than solutions. Hints may be accessed directly using the commands HINT or HINTS." ; Option -> "Special Commands" with description "There are virtually no non-standard commands you actually need in order to win ~Swineback Ridge~. A few extra verbs are provided as alternative ways to phrase existing commands, and the grammar of some existing verbs (e.g. ~attack~) has been extended to allow the use of an indirect object. Some additional commands you may find useful include:^^ EXITS -- show a list of exits for the present location.^ HINT (or HINTS) -- show available hints.^ ABOUT (or HELP) -- show the About menu (but you must have worked that out already to be reading this text!).^" ; Option -> "Dankbetuiging" with description "~De Zwijnsrug~ gebruikt een aantal nuttige extensies van de Inform library:^^ Seeno.h door Cedric Knight (met een kleine verandering door Eric Eve om een 6/11 mogelijkheid te kunnen gebruiken).^ Scenic.h door Roger Firth en Stefano Gaburri (gebaseerd op eerder werk van Richard Barnet en Jo Mason).^ Pname.h door Neil Ceruti.^ Style.h door Chris Klimas.^^ Het systeem van menu's (NewMenus.h) is gebaseerd op Menus.h van Graham Nelson, maar is door Eric Eve sterk aangepast om (a) het Glulx-compatible te maken, (b) enkele nieuwe mogelijkheden van de 6/11 library te kunnen gebruiken, en (c) een hint-systeem van zijn eigen hand te kunnen incorporeren dat gebaseerd is op idee@:en uit Mike Roberts' adv3 library voor TADS 3).^^ De beta-testers voor ~De Zwijnsrug~ waren Johan Berntsson, Sara Brookside, Samantha Casanova, Katzy (ook bekend als Javri), Michel Nizette, George Oliver, en Phil Swinbank - een geweldig team die met elkaar veel meer dingen wisten te vinden die verbeterd moesten worden dan ik voor mogelijk had gehouden in zo'n klein spelletje!^^ De Nederlandse vertaling is mogelijk gemaakt door de Nederlandse vertaling van de Inform 6/11 library door Yuri Robbers. Beta-testers waren: {NOG TE DOEN}.^^ Daarnaast dient natuurlijk Graham Nelson bedankt te worden voor de Inform-taal en library.^^" ; Option -> "Commentaar en Bugs" with description "Als je commentaar hebt of bugs hebt gevonden, kan je contact opnemen met de oorspronkelijke auteur of de vertaler. Eric Eve kan je emailen op eric.eve@@64hmc.ox.ac.uk; Victor Gijsbers op victor@@64lilith.gotdns.org. Voor opmerkingen over het spel zelf en bugs die repliceerbaar zijn in de Engelse versie kan je het beste Eric mailen, voor opmerkingen over de vertaling en bugs die alleen in de Nederlandse versie aanwezig zijn moet je bij Victor zijn." ; Option -> "Licentie" with description "~De Zwijnsrug~ is vrije software.^^ 1. ~De Zwijnsrug~ en alle tekst die door het programma geproduceerd wordt zijn copyright (c) 2006 door Eric Eve. De Nederlandse vertaling is copyright (c) 2006 door Victor Gijsbers.^^ 2. Deze Nederlandse versie wordt, met goedkeuring van de oorspronkelijke auteur, vrijgegeven onder de GNU Public License. Kort gezegd houdt dit in dat zowel dit programma als de broncode gratis te verkrijgen zijn en naar hartelust gekopieerd en verspreid mogen worden. Echter, alle software of andere werken waarin delen van dit programma of de broncode gebruikt worden, moeten op hun beurt ook onder de GNU General Public License uitgebracht worden.^^^ This program is free software; you can redistribute it and/or modify^ it under the terms of the GNU General Public License as published by^ the Free Software Foundation; either version 2 of the License, or^ (at your option) any later version.^^ This program is distributed in the hope that it will be useful,^ but WITHOUT ANY WARRANTY; without even the implied warranty of^ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the^ GNU General Public License for more details.^^ You should have received a copy of the GNU General Public License^ along with this program; if not, write to the Free Software^ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA^^^ Kijk op http://www.gnu.org/licenses/gpl.txt voor de tekst van de GNU General Public License.^^^ 3. Enkele bestanden die worden meegeleverd vallen niet onder deze licentie. Zie het bestand licentie.txt." ; Menu -> hint_menu "Hints" ; HintGoal ->-> start_goal "Wat doe ik nu?" has open with when_closed [; return (outside_hut has visited && inside_tent has visited && inside_supply_tent has visited); ], description "Ga op onderzoek uit." "Kijk dan nog wat verder rond." "Blijf op onderzoek uitgaan en rondkijken." ; HintGoal ->-> next_goal "En wat moet ik nu doen?" with when_open [; return (start_goal hasnt open); ], description "Het is duidelijk dat je een manier moet vinden om de Phartipu te verslaan." "En natuurlijk is het ook duidelijk dat je ze niet allemaal in je eentje kan dood maken." "Dus je moet op een andere manier van ze af proberen te komen." "Wat zou een leger kunnen verjagen, afgezien van het verliezen van een veldslag?" "Misschien kan je hun moreel omlaag halen?" "Hoe goed heb je de vallei en het kamp van de vijand bestudeerd?" "Heb je het laatste inlichtingenrapport gelezen?" "Hoe zouden de Phartipu reageren indien er iets ergs gebeurde met de Grote Pong?" "Waar is het paviljoen van de Grote Pong geplaatst?" "Waarom zou het daar geplaatst zijn?" "Misschien kan je iets doen met zijn watertoevoer?" ; HintGoal ->-> "Hoe kom ik in de hut?" with when_open [; return (outside_hut has visited); ], when_closed [; return (inside_hut has visited); ], description "Je moet een manier vinden om de deur van het slot te halen." "Het is misschien niet helemaal gebruikelijk." "Wat, afgezien van een sleutel, zou je in het slot kunnen proberen te stoppen?" ; HintGoal ->-> "Hoe kom ik voorbij het stekelige bosje?" with when_open [; return (bush has visited); ], when_closed [; return (parent(bush) == nothing); ], description "Het lijkt te dik te zijn om doorheen te komen." "Wat zou je met een struik kunnen doen die te dik is?" "Waarmee zou je het bosje kunnen snoeien?" "Heb je geprobeerd het te voelen?" "Wat gebeurt er wanneer je het met je zwaard probeert kapot te hakken?" "Als dat niet meteen werkte, bevatte het antwoord dan misschien een tip?" "... kriebel!" "Wat voor soort struik associeer je met Mozes?" "Helaas werd de struik van Mozes niet vernietigd, en deze heeft misschien wat aanmoediging nodig." ; HintGoal ->-> "Hoe kom ik voorbij de patrouilles?" with when_open [; return (steep_path has locked); ], when_closed [; return (steep_path.patrolled == false); ], description "Misschien moet je niet precies proberen om langs ze te komen." "Wellicht moet je meer in termen van afleiding denken." "Wat zou opschudding in het vijandelijke kamp teweeg kunnen brengen?" "Heb je geprobeerd om de ballista te gebruiken?" ; HintGoal ->-> "Hoe gebruik ik de ballista?" with when_open [; return ballista_lever.result == 1; ], when_closed [; return ballista_lever.result > 1; ], description "Hoe goed heb je hem bestudeerd?" "Het is net een gigantische kruisboog - wat voor stappen denk je te moeten uitvoeren?" "Waar zou de hendel voor zijn?" "Met wat voor soort object zou de ballista geladen moeten worden?" "Waar heb je hier in de buurt zoiets gezien?" ; HintGoal ->-> "Kan ik de ballista iets laten doen dat effectiever is?" with when_open [; return ballista_lever.result == 2; ], when_closed [; return ballista_lever.result > 2; ], description "Ja." "Hoe zou de ballista meer schade kunnen doen?" "Heb je iets met een vlam gezien hier in de buurt?" "Ben je iets anders tegengekomen dat als ~vurig~ omschreven zou kunnen worden?" ; HintGoal ->-> "Hoe kan ik in de spleet klimmen?" with when_open [; return below_fissure has locked; ], when_closed [; return inside_cave has visited; ], description "Wat gebeurt er wanneer je het probeert?" "Wordt er iets genoemd dat nuttig zou kunnen zijn?" "Als je het ronde gat niet als een handvat kan gebruiken, wat zou je er dan mee kunnen doen?" "Wat zou sterk genoeg zijn om je klimpoging te ondersteunen?" "Hoe zou je iets in het gat klem kunnen zetten?" ; #Ifdef DEBUG; [ LanguageVerbIsDebugging w; if (w == 'purloin' or 'tree' or 'abstract' or 'pn' or 'gn' or 'gonear' or 'scope' or 'showobj') rtrue; rfalse; ]; #Endif; !===================================================== Constant ScenicError myScenicError; Global ScenicFlag = 7; Include "Scenic"; [myScenicError; switch(action_to_be){ ##Smell, ##Drink: L__M(action_to_be); ##Fill, ##Insert, ##Open, ##Close, ##PutOn, ##Take: print_ret "You neither can nor need to manipulate the ", (address) ScenicFound, "."; ##GetOff: print_ret "You aren't on the ", (address) ScenicFound, "."; ##Exit: print_ret "You aren't in the ", (address) ScenicFound, "."; default: print_ret "You may as well leave the ", (address) ScenicFound, " alone."; } ]; Include "GrammarD"; Verb 'pour' * noun 'in'/'into'/'on'/'onto' noun -> Pour ; ifdef DEBUG; Verb meta 'pn' * multi ->XPurloin; Verb meta 'gn' * noun -> GoNear; endif; Verb meta 'about' 'help' * -> About; Verb 'exits' * -> Exits; !Verb 'kick' = 'attack'; Verb 'follow' * noun ->Follow; !Verb 'wind' 'crank' = 'turn'; !Verb 'load' * container 'with' held ->Insert reverse ! * noun 'into'/'onto' container ->Insert !; Verb 'fire' * noun -> Fire; Verb 'wedge' * held 'in' noun ->Insert; Verb 'crawl' * 'through'/'into'/'in' noun=is_fissure ->Enter; !Verb 'grab' = 'take'; Verb meta 'hint' 'hints' * ->Hint; Verb 'xyzzy' 'plugh' 'plover' * ->Xyzzy; Verb 'knock' * noun -> KnockOn * 'on' noun -> KnockOn ; Verb 'aim' * noun -> Aim; Verb 'extinguish' 'douse' * noun -> Douse; !Verb 'hack' = 'cut'; !Extend 'take' ! * noun = is_dagger 'from' noun=is_corpse -> Remove ! * noun 'with' noun ->Insert !; !Extend 'remove' ! * noun = is_dagger 'from' noun=is_corpse -> Remove !; !Extend 'pull' ! * noun = is_dagger 'from' noun=is_corpse -> Remove !; !Extend 'pray' * 'to' 'malodor' ->BadPray; !Extend 'go' ! * 'along'/'up'/'down' noun -> GoAlong !; !Extend 'cut' ! * 'through' noun 'with' held -> Cut ! * noun 'with' held -> Cut !; !Extend 'drink' * 'from' noun -> Drink; !Extend only 'climb' * 'in'/'into'/'on'/'onto' noun -> Enter; !Extend 'attack' * noun 'with' held ->Attack; !Extend only 'squeeze' * 'through' noun=is_fissure ->Enter; !Extend 'burn' first * flammable 'with' held ->Burn; !Extend 'look' * 'around' -> Look ! * 'behind' noun ->LookBehind ! * noun -> Examine; !Extend 'examine' * noun=ADirection -> Examine ! * 'to' noun=ADirection -> Examine !; !Extend 'fill' * noun 'with' noun -> Insert reverse; !Extend only 'pick' * noun ->Take ! * noun 'with' held ->Unlock !; !Extend 'put' * multiexcept 'under'/'behind' noun ->PutUnder;